﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Browser;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace Aspire.App
{
    public partial class App : Application
    {
        public App()
        {
            this.Startup += this.Application_Startup;
            this.UnhandledException += this.Application_UnhandledException;

            InitializeComponent();
        }

        private void Application_Startup(object sender, StartupEventArgs e)
        {
            // 初始化框架
            AspireFramework.Instance.Inited += ((s1, a1) =>
            {
                //初始化完成后， 显示主页面
                Application.Current.RootVisual = new MainPage();
            });
            AspireFramework.Instance.InitFaild += ((s1, a1) =>
            {
                throw new AspireException(ExceptionType.FRAMEWORK_INIT_ERROR, String.Format("应用程序框架初始化错误, 错误信息为{0}", a1));
            });

            int endindex = HtmlPage.Document.DocumentUri.AbsoluteUri.IndexOf('/', 8);
            string serverBaseUrl = HtmlPage.Document.DocumentUri.AbsoluteUri.Substring(0, endindex + 1);

#if DEBUG
            AspireFramework.Instance.ConfigUri = serverBaseUrl + "ClientBin/Aspire.Config.txt";
#else
            AspireFramework.Instance.ConfigUri = "http://localhost:8080/system_config?system_id=14";
#endif

            //开始初始化
            AspireFramework.Instance.Init();
        }

        private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
        {
            // 如果应用程序是在调试器外运行的，则使用浏览器的
            // 一个 ChildWindow 控件。
            if (!System.Diagnostics.Debugger.IsAttached)
            {
                // 注意: 这使应用程序可以在已引发异常但尚未处理该异常的情况下
                // 继续运行。 
                // 对于生产应用程序，此错误处理应替换为向网站报告错误
                // 并停止应用程序。
                e.Handled = true;
            }
        }
    }
}